From 6ce2329f5ce20f8352e3ea15594f2532ab8a392c Mon Sep 17 00:00:00 2001 From: Sebastien Castiel Date: Wed, 6 Dec 2023 19:50:56 -0500 Subject: Reimbursements --- src/app/groups/[groupId]/balances/page.tsx | 53 +++++++++++++++++-------- src/app/groups/[groupId]/reimbursement-list.tsx | 31 +++++++++++++++ 2 files changed, 68 insertions(+), 16 deletions(-) create mode 100644 src/app/groups/[groupId]/reimbursement-list.tsx (limited to 'src/app/groups/[groupId]') diff --git a/src/app/groups/[groupId]/balances/page.tsx b/src/app/groups/[groupId]/balances/page.tsx index 24818c9..33ba653 100644 --- a/src/app/groups/[groupId]/balances/page.tsx +++ b/src/app/groups/[groupId]/balances/page.tsx @@ -1,4 +1,5 @@ import { BalancesList } from '@/app/groups/[groupId]/balances-list' +import { ReimbursementList } from '@/app/groups/[groupId]/reimbursement-list' import { Card, CardContent, @@ -7,7 +8,7 @@ import { CardTitle, } from '@/components/ui/card' import { getGroup, getGroupExpenses } from '@/lib/api' -import { getBalances } from '@/lib/balances' +import { getBalances, getSuggestedReimbursements } from '@/lib/balances' import { notFound } from 'next/navigation' export default async function GroupPage({ @@ -20,22 +21,42 @@ export default async function GroupPage({ const expenses = await getGroupExpenses(groupId) const balances = getBalances(expenses) + const reimbursements = getSuggestedReimbursements(balances) + console.log(reimbursements) return ( - - - Balances - - This is the amount that each participant paid or was paid for. - - - - - - + <> + + + Balances + + This is the amount that each participant paid or was paid for. + + + + + + + + + Suggested reimbursements + + Here are suggestions for optimized reimbursements between + participants. + + + + + + + ) } diff --git a/src/app/groups/[groupId]/reimbursement-list.tsx b/src/app/groups/[groupId]/reimbursement-list.tsx new file mode 100644 index 0000000..9d3ec49 --- /dev/null +++ b/src/app/groups/[groupId]/reimbursement-list.tsx @@ -0,0 +1,31 @@ +import { Reimbursement } from '@/lib/balances' +import { Participant } from '@prisma/client' + +type Props = { + reimbursements: Reimbursement[] + participants: Participant[] + currency: string +} + +export function ReimbursementList({ + reimbursements, + participants, + currency, +}: Props) { + const getParticipant = (id: string) => participants.find((p) => p.id === id) + return ( +
+ {reimbursements.map((reimbursement, index) => ( +
+
+ {getParticipant(reimbursement.from)?.name} owes{' '} + {getParticipant(reimbursement.to)?.name} +
+
+ {currency} {reimbursement.amount.toFixed(2)} +
+
+ ))} +
+ ) +} -- cgit v1.3